从 C 语言调用 Rust 语言 您所在的位置:网站首页 rust语言 c语言 从 C 语言调用 Rust 语言

从 C 语言调用 Rust 语言

2024-06-18 07:36| 来源: 网络整理| 查看: 265

调用 Rust

将 Rust 函数和类型导出到 C 很简单:

interoperability/rust/libanalyze/analyze.rs

//! Rust FFI demo. #![deny(improper_ctypes_definitions)] use std::os::raw::c_int; /// Analyze the numbers. #[no_mangle] pub extern "C" fn analyze_numbers(x: c_int, y: c_int) { if x < y { println!("x ({x}) is smallest!"); } else { println!("y ({y}) is probably larger than x ({x})"); } }

interoperability/rust/libanalyze/analyze.h

#ifndef ANALYSE_H #define ANALYSE_H extern "C" { void analyze_numbers(int x, int y); } #endif

interoperability/rust/libanalyze/Android.bp

rust_ffi { name: "libanalyze_ffi", crate_name: "analyze_ffi", srcs: ["analyze.rs"], include_dirs: ["."], }

我们现在可以从一个 C 二进制文件中调用它:

interoperability/rust/analyze/main.c

#include "analyze.h" int main() { analyze_numbers(10, 20); analyze_numbers(123, 123); return 0; }

interoperability/rust/analyze/Android.bp

cc_binary { name: "analyze_numbers", srcs: ["main.c"], static_libs: ["libanalyze_ffi"], }

在你的设备上构建,推送,并运行二进制文件 :

m analyze_numbers adb push "$ANDROID_PRODUCT_OUT/system/bin/analyze_numbers" /data/local/tmp adb shell /data/local/tmp/analyze_numbers

#[no_mangle] 禁用了 Rust 通常的名称重整,因此导出的符号将仅为函数的名称。你还可以使用 #[export_name = "some_name"] 来指定任意你想要的名称。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有